import { generateService } from '@umijs/openapi';

// 配置说明：
// 1. schemaPath: 后端 Swagger 文档地址
// 2. serversPath: 生成的 API 文件存放目录
// 3. requestLibPath: 自定义请求方法路径
// 4. projectName: 项目名称，用于生成的文件命名
// 5. apiPrefix: API 前缀，用于统一处理 API 路径

export default {
  // 后端 Swagger 文档地址
  schemaPath: 'http://localhost:8080/swagger/doc.json',
  
  // 生成的 API 文件存放目录
  serversPath: './src/api',
  
  // 自定义请求方法路径，使用我们封装的 request 工具
  requestLibPath: "import { request } from '@/utils/request'",
  
  // 项目名称
  projectName: 'admin-api',
  
  // API 前缀，设置为空字符串，因为我们在 request.ts 中已经配置了 baseURL
  apiPrefix: '""',
  
  // 自定义钩子
  hook: {
    // 自定义函数名生成规则
    customFunctionName: (data: any) => {
      return data.operationId || data.path?.replace(/\//g, '_').replace(/[{}]/g, '');
    },
    
    // 自定义类型名生成规则
    customTypeName: (data: any) => {
      return data.typeName;
    },
    
    // 自定义文件名生成规则 - 解决拼音命名问题
    customFileNames: (operationObject: any, apiPath: string, apiMethod: string) => {
      // 从 operationObject 中获取 tags，用于生成英文文件名
      const tags = operationObject.tags || [];
      
      // 定义中文到英文的映射
      const tagMapping: Record<string, string> = {
        '应用配置管理': 'app-config-management',
        '版本管理': 'version-management',
        '卡片管理': 'card-management', 
        '主题管理': 'topic-management',
        '用户管理': 'user-management',
        '认证管理': 'auth-management',
        '统计管理': 'stats-management',
        '系统管理': 'system-management',
        '权限管理': 'permission-management',
        '日志管理': 'log-management',
        '配置管理': 'config-management',
        '文件上传': 'upload-management',
        '管理员认证': 'admin-auth',
        '数据统计': 'data-stats',
        '认证': 'auth',
        '统计信息': 'stats',
        '用户认证': 'user-auth'
      };
      
      // 如果有 tags，使用映射后的英文名称
      if (tags.length > 0) {
        const tag = tags[0];
        const englishName = tagMapping[tag] || tag.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-');
        return [englishName];
      }
      
      // 如果没有 tags，根据 API 路径生成文件名
      const pathSegments = apiPath.split('/').filter(segment => segment && !segment.startsWith('{'));
      if (pathSegments.length > 0) {
        return [pathSegments[pathSegments.length - 1].toLowerCase()];
      }
      
      // 默认返回空数组，使用默认命名
      return [];
    },
  },
  
  // 是否生成 mock 数据
  mock: false,
  
  // 数据字段配置
  dataFields: ['data'],
  
  // 使用小驼峰命名
  isCamelCase: true,
  
  // 枚举样式
  enumStyle: 'string-literal' as const,
};